package com.example.libpro.DBEntity;

import java.io.Serializable;

/**
 * 图书管理系统用户数据实体类
 * 作用：1. 封装用户核心信息，映射数据库"user"表结构；2. 作为各层（DAO层、服务层、用户层）间用户数据的传输载体；
 * 3. 提供统一的getter/setter方法，避免数据格式混乱
 * 关联表：user（用户表）
 * 核心属性：用户ID、登录账号、密码、姓名、角色编号（1=管理员，2=读者）、逻辑删除标识
 */
public class UserEntity implements Serializable {
    // 序列化ID（用于跨组件传输数据，如Intent传递）
    private static final long serialVersionUID = 1L;

    // 核心属性（与"user"表字段一一对应）
    private Integer userId;    // 用户ID（自增主键，数据库生成）
    private String account;    // 登录账号（唯一，非空）
    private String password;   // 登录密码（非空，建议存储加密后的值）
    private String name;       // 用户姓名（非空）
    private Integer roleId;    // 角色编号（1=管理员，2=读者，非空）
    private Integer isDeleted; // 逻辑删除标识（0=未删除，1=已删除，默认0）

    // 无参构造（用于Gson解析、DAO层查询结果映射）
    /**
     * 无参构造方法
     * 功能：供JSON解析（如Gson）、DAO层Cursor结果映射时创建对象，避免反射报错
     */
    public UserEntity() {
    }

    // 全参构造（用于创建完整用户对象，如新增读者时）
    /**
     * 全参构造方法（不含userId，因userId为自增主键，由数据库生成）
     * @param account 登录账号（唯一，非空）
     * @param password 登录密码（非空）
     * @param name 用户姓名（非空）
     * @param roleId 角色编号（1=管理员，2=读者，非空）
     * @param isDeleted 逻辑删除标识（0=未删除，1=已删除，默认0）
     * 功能：创建完整的用户对象（除自增ID外），用于DAO层插入数据
     */
    public UserEntity(String account, String password, String name, Integer roleId, Integer isDeleted) {
        this.account = account;
        this.password = password;
        this.name = name;
        this.roleId = roleId;
        this.isDeleted = isDeleted;
    }

    // Getter与Setter方法（每个属性单独封装，确保数据可控）
    /**
     * 获取用户ID（自增主键）
     * @return Integer 用户ID（null表示未插入数据库）
     */
    public Integer getUserId() {
        return userId;
    }

    /**
     * 设置用户ID（仅DAO层使用，因ID由数据库生成）
     * @param userId 用户ID（数据库自增返回的值）
     */
    public void setUserId(Integer userId) {
        this.userId = userId;
    }

    /**
     * 获取登录账号
     * @return String 登录账号（非空，唯一）
     */
    public String getAccount() {
        return account;
    }

    /**
     * 设置登录账号
     * @param account 登录账号（需确保唯一，非空）
     */
    public void setAccount(String account) {
        this.account = account;
    }

    /**
     * 获取登录密码
     * @return String 登录密码（非空，建议存储加密后的值）
     */
    public String getPassword() {
        return password;
    }

    /**
     * 设置登录密码
     * @param password 登录密码（非空，建议先加密再设置）
     */
    public void setPassword(String password) {
        this.password = password;
    }

    /**
     * 获取用户姓名
     * @return String 用户姓名（非空）
     */
    public String getName() {
        return name;
    }

    /**
     * 设置用户姓名
     * @param name 用户姓名（非空）
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取角色编号
     * @return Integer 角色编号（1=管理员，2=读者）
     */
    public Integer getRoleId() {
        return roleId;
    }

    /**
     * 设置角色编号
     * @param roleId 角色编号（仅允许1或2，非空）
     */
    public void setRoleId(Integer roleId) {
        this.roleId = roleId;
    }

    /**
     * 获取逻辑删除标识
     * @return Integer 逻辑删除标识（0=未删除，1=已删除）
     */
    public Integer getIsDeleted() {
        return isDeleted;
    }

    /**
     * 设置逻辑删除标识
     * @param isDeleted 逻辑删除标识（默认0，删除时设为1）
     */
    public void setIsDeleted(Integer isDeleted) {
        this.isDeleted = isDeleted;
    }

    // toString方法（用于调试，打印用户信息）
    /**
     * 重写toString方法
     * @return String 用户对象的字符串表示（含所有属性值）
     * 功能：调试时打印用户信息，便于定位数据问题
     */
    @Override
    public String toString() {
        return "UserEntity{" +
                "userId=" + userId +
                ", account='" + account + '\'' +
                ", password='" + password + '\'' +
                ", name='" + name + '\'' +
                ", roleId=" + roleId +
                ", isDeleted=" + isDeleted +
                '}';
    }
}
